A derivation starts with some base equation, then proceeds through a series of steps transforming it into a form that can be solved numerically (A symbolic/analytic solution would be nice, but not possible in most cases.) The steps can be divided into three categories
- Exact transformations - rearranging terms, replacing an expression with a different form, the usual steps involved in a proof, etc
- Approximations - using a truncated series expansion, replacing a derivative with discretized version, etc.
- Specializations - Specifying the physical or model parameters in order to make the equation numerically solvable - like the number of spatial dimensions, number of particles, interaction potentials, etc.
At the end of the derivation, the result can be evaluated numerically using the CAS (Computer Algebra System - I assume this derivation modeling has been implemented using one) facilities, if simple enough. More complex or time-consuming results (a more likely case) can be further transformed by code generation to C/Fortran (or some other execution system).
One important feature of this workflow is every step in creating the program is checked by machine. This should greatly reduce transcription errors (dropped minus signs and factors of 2 - this is what started the whole project in the first place). Also it moves part of the process of creating scientific programs into the realm of 'ordinary software', and as such makes it subject to normal software engineering techniques - unit testing, etc. Testing scientific (numerical) software is a difficult problem - this should help make it (a little) easier and more reliable.
Some other work I've run across related to describing mathematics:
- Structured derivations were developed for teaching proof in high school mathematics.
- OMDoc is a markup language for describing mathematical structures at a higher level than a single formula (a proof, for instance)
No comments:
Post a Comment